# BabyOS OTA服务介绍 BabyOS的OTA例程地址:https://gitee.com/notrynohigh/BabyOS_Example/tree/BearPi-IAP/ BabyOS的OTA是基于两个功能模块:协议(b_mod_protocol)和IAP(b_mod_iap) 为更加方便地为产品增加OTA功能,BabyOS增加OTA服务,将协议模块与IAP模块进行结合。 BabyOS早先便提供协议服务制定了一套指令和参数,与具体协议进行解耦。 ![](../_static/uml_ota.jpg) 订阅指令是协议服务提供的功能,其运行流程如下: ![](../_static/uml_ota_sub.jpg) 因此OTA服务并不依赖具体哪一个协议,用户将自己的私有协议对接BabyOS的协议服务便可以直接使用OTA服务。 具体代码: ```C int main(void) { .... /* USER CODE BEGIN 2 */ bInit(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ HAL_UART_Receive_IT(&huart1, &Uart1RecDat, 1); bHalUartReceiveIdle(B_HAL_UART_1, &ProtocolUart); // 初始化协议服务模块 ProtocolId = bProtSrvInit(&ProtocolAttr, _ProtSrvGetInfo); // 初始化ota服务模块 bOtaSrvInit(ProtocolId, _ProtocolSendData, bSPIFLASH, bSPIFLASH, 180); bGUI_ADD_DEVICE(bST7789, NULL, 240, 240, 0); UG_FillScreen(C_RED); while (1) { bExec(); } } ``` 如此,只需要调用1个接口即可。 可配合BabyOS的上位机进行实验:https://gitee.com/notrynohigh/BabyOS_Protocol